// 获取路径 主项目配置 代理路径 http://192.168.100.89:8004/jiuyun
const ORIGIN = window.location.origin

// 通过路径 获取模型的 发布版本
export const getModelPublishVersionByPathOfFetch = async (url = '') => {
  if (!url) return
  try {
    const response = await fetch(`${ORIGIN}${url}`)
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }
    // 由于返回的是JS文件，我们需要以文本形式获取
    // const json = await response.json() // 如果符合json格式，可以用
    const text = await response.text()
    let result = text
    if (typeof text === 'string') {
      result = JSON.parse(text)
    }
    return result
  } catch (error) {
    console.error('获取模型数据失败:', error)
    // 确保在错误情况下也有返回值
    return { result: null, modelIdMapProperties: {} }
  }
}

// 通过路径 获取模型的 内容 schema
export const getModelSchemaByPathOfFetch = async (modelIds = {}) => {
  if (!Object.keys(modelIds).length) return {}
  try {
    // 确保ORIGIN已定义
    const origin = ORIGIN || window.location.origin
    const modelIdMapProperties = {}
    // 使用Promise.allSettled确保所有请求都被处理，无论成功失败
    const promises = Object.entries(modelIds).map(([key, value]) => {
      const url = `/formConfig/datamodel/${key}.js?versionId=${value}`
      return fetch(`${origin}${url}`).then(async (response) => {
        if (!response.ok) {
          // console.warn(`模型 ${key} 加载失败: HTTP ${response.status}`)
          return null
        }
        // 由于返回的是JS文件，我们需要以文本形式获取
        const text = await response.text()
        let modelResult = text
        if (typeof text === 'string') {
          try {
            modelResult = JSON.parse(text)
          } catch (e) {
            // console.warn(`解析模型${key}数据失败:`, e)
            return null
          }
        }
        if (modelResult && Object.keys(modelResult).length > 0) {
          // console.log(`模型 ${key} 加载成功:`, modelResult)
          modelIdMapProperties[key] = modelResult
          return modelResult
        }
        return null
      })
    })

    // 等待所有请求完成
    const results = await Promise.allSettled(promises)

    // 过滤出成功加载的模型
    const successfulModels = results.filter((r) => r.status === 'fulfilled' && r.value !== null)

    console.log('模型加载完成:', {
      total: results.length,
      success: successfulModels.length,
      failed: results.length - successfulModels.length,
    })

    return modelIdMapProperties
  } catch (error) {
    console.error('获取模型数据失败:', error)
    // 错误情况下也返回已经成功加载的模型数据
    return { result: null, modelIdMapProperties }
  }
}

// 通过路径 获取模型的 发布版本 动态加载 script 形式，暂时不用此方式
export const getModelPublishVersionByPathOfScript = (url = '') => {
  const script = document.createElement('script')
  script.src = `${ORIGIN}${url}`
  window.document.head.appendChild(script)
  script.onload = () => {
    console.log('script 加载完成', window)
    // 这种方式需要后端配置文件起一个变量名，这个变量名 就是我们获取的数据的变量名，用 var 声明
    if (window['变量名']) {
      console.log(window['变量名'], '变量名')
    }
  }
}
